perm filename PUP3[AP,DBL] blob
sn#072915 filedate 1973-11-21 generic text, type T, neo UTF8
(FILECREATED "20-NOV-73 20:28:02" PUP3)
(DEFINEQ
(A:BEING:ORDER
[LAMBDA (B1 B2)
(LESSP (FAST:BEING:COMPLEX B1)
(FAST:BEING:COMPLEX B2])
(A:BEING:WHEN
[LAMBDA (BB)
(SETQ SUM 0)
[FOR W IN (GETP BB WHEN) DO (COND
((ATTEMPT (EVAL (CAR W))
THEN T)
(SETQ SUM
(PLUS SUM (EVAL (CADR W]
SUM])
(AD
[LAMBDA (L)
(SETQ PUP3FNS (SORT (APPEND PUP3FNS L)))
(SETQ PUP3FNS (INTERSECTION PUP3FNS PUP3FNS))
(FOR X IN SET:OF:BEINGS DO (PUT X SPEC:WHY (TUPLE NO SPECIAL REASON)
))
(MAKEFILE (QUOTE PUP3])
(ADD:BEING
[LAMBDA (B)
(SET B B)
(PUT B BEING T)
[FOR X IN SET:OF:BEING:PARTS DO (PROGN (PRIN1 X)
(PRIN1 " ")
(PUT B X (READ]
(PRIN1
"*** FINISHED ***
SHOULD I MAKE A NEW FILE OF PUP? (T OR NIL)..... ")
(SETQ SET:OF:BEINGS (CONS B SET:OF:BEINGS))
(SEMI:COMPILE B)
(COND
((RATOM)
(AD (LIST B])
(BLIND:BREAK:UP
(QLAMBDA (←←X1
←←X2
←←X3
←←X4)
[MATCHQ ←BREAK:RESULT
(EVAL (CONS (QUOTE APPEND)
(MAPCAR (TUPLE $X1 $X2 $X3 $X4)
LOOKUP]
(ASSERT (EXECUTABLE $BREAK:RESULT))
$BREAK:RESULT BACKTRACK))
(CHANGEB
[LAMBDA (B:NAME B:PART)
(SETQ TEMP (GETP B:NAME B:PART))
(EDITV TEMP)
(PUT B:NAME B:PART TEMP)
(COND
((MEMBER B:PART COMPILABLE:BEING:PARTS)
(SEMI:COMPILE B:NAME)))
T])
(COLON:BACK
[LAMBDA (LL)
(SETQ MM (CAR LL))
[SETQ LL (MAPCAR (CDR LL)
(FUNCTION (LAMBDA (E)
(CONCAT ":" E]
(SETQ LL (CONS MM LL))
(PACK LL])
(COLON:BREAK
[LAMBDA (E)
(PROG (UP RP)
(SETQ UP (UNPACK E))
(SETQ BUFF NIL)
LL [COND
((NULL UP)
(SETQ RP (CONS (PACK BUFF)
RP))
(RETURN (REVERSE RP]
[COND
((MEMBER (CAR UP)
BREAKUP:LIST)
(SETQ RP (CONS (PACK BUFF)
RP))
(SETQ BUFF NIL))
(T (SETQ BUFF (NCONC1 BUFF (CAR UP]
(SETQ UP (CDR UP))
(GO LL])
(DIMENSION1
[LAMBDA (B)
(EVAL (CAR (GETP B COMPLEXITY:VECTOR])
(DIMENSION2
[LAMBDA (B)
(EVAL (CADR (GETP B COMPLEXITY:VECTOR])
(DIMENSION3
[LAMBDA (B)
(EVAL (CADDR (GETP B COMPLEXITY:VECTOR])
(DISK:DUMP
[LAMBDA (FILE STUFF)
(SETQ FILEVARS (MKATOM (CONCAT (MKSTRING FILE)
"VARS")))
(SET FILEVARS (QUOTE (EVERYTHING)))
(SETQ EVERYTHING STUFF)
(MAKEFILE FILE])
(DOT:PROD
[LAMBDA (L1 L2)
(COND
[L1 (PLUS (TIMES (CAR L1)
(CAR L2))
(DOT:PROD (CDR L1)
(CDR L2]
(T 0])
(DUMP:BEING
[LAMBDA (B)
(PRIN1 "************************* ")
(PRINT B)
[FOR X IN SET:OF:BEING:PARTS DO (COND
((SETQ X2 (GETP B X))
(PRINT X)
(PP X2)
(TERPRI]
(QUOTE FINISHED])
(FAST:BEING:COMPLEX
[LAMBDA (B)
(DOT:PROD (QUOTE (.1 .6 .3))
(MAPCAR (GETP B COMPLEXITY:VECTOR)
EVAL])
(FIRST:FEW
[LAMBDA (L)
(SETQ N (PLUS 1 (IQUOTIENT (LENGTH L)
2)))
(REVERSE (NTH (REVERSE L)
N])
(FOREACH
[LAMBDA (X IN SET DO ACTION)
(PROG (RESULT)
START:HERE
(COND
((NULL SET)
(RETURN RESULT)))
(SET X (CAR SET))
(SETQ SET (CDR SET))
(SETQ RESULT (EVAL ACTION))
(GO START:HERE])
(INITIALS
[LAMBDA (L)
(MAPCAR L (FUNCTION (LAMBDA (E)
(CAR (UNPACK E])
(LOOKUP
[LAMBDA (ANY)
(COND
((NULL ANY)
NIL)
(T
(PROG (SUCC)
[FOR X IN SET:OF:BEINGS
DO (FOR Y IN (GETP X IDEN)
DO (PROGN (MATCHQ ←YY
(CAR Y))
(ATTEMPT (MATCHQ $YY ANY)
THEN (RETURN
(SETQ SUCC
(MAPCAR (CADR Y)
EVAL)))
ELSE NIL]
(COND
(SUCC (RETURN (CONS (QUOTE TUPLE)
SUCC)))
(T (IS (TRANSLATION OF (@ ANY)
IS ←T1))
(IS (EXECUTABLE $T1))
(RETURN $T1])
(MAIN:WORDS
[LAMBDA (L)
(SETDIFFERENCE L MINOR:WORDS])
(PERMIT:USER:INTERRUPT
[LAMBDA NIL
(COND
(EXPERTISE (PRIN1 "INTERRUPT? "))
(T (PRIN1
"
DO YOU WISH TO INTERRUPT ME NOW, TO ASK ME ABOUT WHAT I'M DOING? ")))
(SELECTQ (RATOM)
(Y (PROCESS:USER:INTERRUPT))
(N NIL)
(PROGN (PRIN1 "
NO, NO. TYPE Y OR N ......... ")
(PERMIT:USER:INTERRUPT])
(POP:DEMONS
[LAMBDA NIL
(MATCHQ (←CURRENT:DEMONS
←←DEMON:STACK)
$DEMON:STACK])
(PROCESS:USER:INTERRUPT
[LAMBDA NIL
(QPROG (RESPONSE ←BC
←BC1
←BC2)
(COND
((NOT EXPERTISE)
[PRINT (APPEND (QUOTE (BEING IS))
(LIST (CAR BEING:STACK]
(PRIN1 " TYPE ? OR ")))
(MATCHQ (←BC
←←BC2)
BEING:STACK)
(MATCHQ ←BC1
(TUPLE))
L
(PRIN1 " REQUEST: ")
(ATTEMPT [SELECTQ (SETQ RESPONSE (READ))
[? (PRIN1
" YOUR OPTIONS ARE AS FOLLOWS:
QUIT END THE INTERRUPT
BEING PRINT NAME OF CURRENT BEING
DEMONS PRINT SET OF DEMONS CURRENTLY ACTIVE
CONTROL:HISTORY PRINT LIST OF BEINGS IN CONTROL, THE PATH FROM THE
CURRENT BEING BACK TO THE BEGINNING OF THE PROGRAM
OLDER CONSIDER THE BEING WHICH CALLED THE CURRENT ONE
YOUNGER CONSIDER THE BEING WHICH THE CURRENT ONE CALLED
OLDEST CONSIDER THE FIRST BEING IN CONTROL
YOUNGEST CONSIDER THE LAST BEING IN CONTROL
")
(PRIN1
"SPEC:WHY PRINT OUT THE SPECIFIC REASON(S) THAT THIS BEING WAS
CALLED. THIS DIFFERS FROM 'WHY' IN SENSE THAT SPEC:WHY IS
THE REASON GIVEN BY THE CALLER, WHERAS WHY IS THE REASON
STORED WITH THE CURRENT BEING PERMANENTLY.
")
(MAPC SET:OF:BEING:PARTS
(FUNCTION (LAMBDA (Y)
(PRIN1 Y)
(PRIN1 " PRINT OUT ")
(PRIN1 Y)
(PRIN1
" WITH RESPECT TO CURRENT BEING
"]
(QUIT (COND
((NOT EXPERTISE)
(PRIN1 "
END OF INTERRUPT
")))
(RETURN))
(BEING (PRINT $BC))
(CONTROL:HISTORY (PRIN1 $BC1)
(PRIN1 " *** ")
(PRIN1 $BC)
(PRIN1 " *** ")
(PRIN1 $BC2)
(TERPRI))
(DEMONS (PRIN1 $CURRENT:DEMONS)
(PRIN1 "
THE DEMON STACK IS ")
(PRINT $DEMON:STACK))
(OLDER (MATCHQ ←BC1
(TUPLE $$BC1 $BC))
(MATCHQ (←BC
←←BC2)
$BC2)
(PRINT $BC))
(YOUNGER (MATCHQ ←BC2
(TUPLE $BC $$BC2))
(MATCHQ (←←BC1
←BC)
$BC1)
(PRINT $BC))
(OLDEST (MATCHQ (←←BC1
←BC)
BEING:STACK)
(MATCHQ ←BC2
(TUPLE))
(PRINT $BC))
(YOUNGEST (MATCHQ (←BC
←←BC2)
BEING:STACK)
(MATCHQ ←BC1
(TUPLE))
(PRINT $BC))
(COND
((MEMBER RESPONSE NON:EVAL:BEING:PARTS)
(PRINT (GETP $BC RESPONSE)))
[(MEMBER RESPONSE EVAL:BEING:PARTS)
(PRINT (EVAL (GETP $BC RESPONSE]
((NLSETQ (PRINT (EVAL RESPONSE)))
T)
(T (FAIL]
THEN T
ELSE (PRIN1
"
*** ERROR *** IMPOSSIBLE. TYPE ? FOR HELP.
"))
(GO L])
(PULLOUT
[LAMBDA (E L)
(COND
((ATOM L)
L)
((EQUAL E (CAR L))
(CDR L))
(T (CONS (CAR L)
(PULLOUT E (CDR L])
(PUSH:DEMONS
[LAMBDA (NEW:DEMONS)
(MATCHQ ←NEW:DEMO
(SETDIFFERENCE NEW:DEMONS $CURRENT:DEMONS))
(MATCHQ ←DEMON:STACK
(TUPLE $CURRENT:DEMONS $$DEMON:STACK))
(MATCHQ ←CURRENT:DEMONS
(TUPLE $$NEW:DEMO $$CURRENT:DEMONS])
(SEMI:COMPILE
[LAMBDA (B)
(EVAL (LIST (QUOTE DEFINEQ)
(LIST B (APPEND (QUOTE [LAMBDA])
(LIST (APPEND (GETP B EXPLICIT:ARGS)
(GETP B IMPLICIT:ARGS)))
[LIST (LIST (QUOTE /SETQ)
(QUOTE BEING:STACK)
(LIST (QUOTE CONS)
B
(QUOTE BEING:STACK]
(LIST (GETP B EXPLICIT:ARGS:CHECK))
[MAPCAR (GETP B PRE:REQUISITES)
(FUNCTION (LAMBDA (X)
(LIST SATISFY
(LIST (QUOTE QUOTE)
X]
(LIST (LIST (QUOTE PUSH:DEMONS)
(GETP B DEMONS)))
[MAPCAR (GETP B CO:REQUISITES)
(FUNCTION (LAMBDA (X)
(LIST TRY:TO:SATISFY
(LIST (QUOTE QUOTE)
X]
(GETP B COMMENTS)
(LIST (LIST (QUOTE PUT)
B SPEC:WHY (QUOTE BECAUSE)))
(QUOTE ((ASSERT (APPLYING DEMONS)
APPLY
$USER:INTERRUPT:DEMONS)))
(LIST (LIST (QUOTE SETQ)
(QUOTE FN:VALUE)
(GETP B META:CODE)))
[MAPCAR (GETP B CO:REQUISITES)
(FUNCTION (LAMBDA (X)
(LIST SATISFY
(LIST (QUOTE QUOTE)
X]
(QUOTE ((POP:DEMONS)))
[MAPCAR (GETP B POST:REQUISITES)
(FUNCTION (LAMBDA (X)
(LIST SATISFY
(LIST (QUOTE QUOTE)
X]
[QUOTE ((/SETQ BEING:STACK
(CDR BEING:STACK]
(QUOTE (FN:VALUE])
(SETDIFFERENCE
[LAMBDA (S1 S2)
(COND
((NULL S1)
NIL)
(T (APPEND [COND
((MEMBER (CAR S1)
S2)
NIL)
(T (LIST (CAR S1]
(SETDIFFERENCE (CDR S1)
S2])
(SETINTERSECTION
[LAMBDA (S1 S2)
(INTERSECTION S1 S2])
(SETUNION
[LAMBDA (S1 S2)
(SETQ S1 (APPEND S1 S2))
(INTERSECTION S1 S1])
(SINGLETON
[LAMBDA (S)
(NULL (CDR S])
(SIZE
[LAMBDA (STRUC)
(QUOTIENT (COUNT STRUC)
2])
(SPECIFICITY:CHECK:DEMON
[LAMBDA (ANYTHING)
(ATTEMPT (BIS (PUP WANTS ←←DESIRED)
THEN (ATTEMPT (IS (SPECIFIC $$DESIRED))
THEN (FAIL)
ELSE (PROGN (MAKE:SPECIFIC $$DESIRED)
(FAIL])
(START
[LAMBDA (EXPERTISE)
(PROG NIL
(SETQ Y (QUOTE Y))
(SETQ N (QUOTE N))
(SETQ BEING:STACK NIL)
(SETQ BECAUSE NIL)
(SETQ KNOWN:NAMES T)
(MATCHQ ←DEMON:STACK
(TUPLE))
(MATCHQ ←CURRENT:DEMONS
(TUPLE))
(COND
(EXPERTISE (PRIN1 "USER INTERRUPT LEVEL... "))
(T (PRIN1
"HELLO THERE. I AM READY TO START .
HOW OFTEN SHOULD I LET YOU INTERRRUPT ME, TO ASK ME ABOUT WHAT I'M
DOING? TYPE A DIGIT, AS EXPLAINED BELOW:
0 NEVER (ULTIMATE PRODUCTION-RUN MODE)
2 A COUPLE OF TIMES DURING THE COURSE OF WRITING A PROGRAM
4 DURING EACH PHASE OF WRITING A PROGRAM
6 DURING THE WRITING OF EACH NONTRIVIAL SUBFUNCTION OF A PROGRAM
8 DURING EACH PHASE OF WRITING EACH SUBFUNCTION OF A PROGRAM
10 EACH TIME A BEING TRANSFERS CONTROL (ULTIMATE DEBUG MODE)
OK, NOW TYPE A DIGIT... ")))
L [MATCHQ ←PERMANENT:USER:INTERRUPT:DEMONS
(SELECTQ (RATOM)
(0 (CLASS))
(2 (CLASS USER:INTERRUPT:AT:DEBUG
USER:INTERRUPT:AT:END))
(4 (CLASS USER:INTERRUPT:AT:PHASES))
(6 (CLASS USER:INTERRUPT:AT:PHASES
USER:INTERRUPT:AT:CODING))
(8 (CLASS USER:INTERRUPT:AT:PHASES
USER:INTERRUPT:AT:CODING
USER:INTERRUPT:AT:ADAPTING))
(10 (CLASS PERMIT:USER:INTERRUPT))
(AND (PRIN1
"
*** ERROR *** YOU MUST TYPE ONE EVEN INTEGER FROM 0 TO 10
TRY AGAIN:
")
(GO L]
(MATCHQ ←USER:INTERRUPT:DEMONS
$PERMANENT:USER:INTERRUPT:DEMONS)
(SETQ USER:INTERRUPT:COPY:OF:PHASES PROGRAM:WRITING:PHASES)
(SERVE])
(SUBSTITUTE
[LAMBDA (NEW FOR OLD IN LIST:STRUCTURE)
(SET LIST:STRUCTURE (SUBST NEW OLD (EVAL LIST:STRUCTURE])
(TRY:TO:SATISFY
[LAMBDA (SUBGOAL)
(ATTEMPT (SATISFY SUBGOAL)
THEN T
ELSE (SETQ FINAL:CO:REQ (CONS SUBGOAL FINAL:CO:REQ])
(USER:INTERRUPT:AT:ADAPTING
[LAMBDA (S:EXP)
(COND
((EQUAL B ADAPT:PRECONCEIVED:FUNCTION)
(PERMIT:USER:INTERRUPT)
(MATCHQ (CLASS USER:INTERRUPT:AT:ADAPTING
←←USER:INTERRUPT:DEMONS)
$USER:INTERRUPT:DEMONS])
(USER:INTERRUPT:AT:CODING
[LAMBDA (S:EXP)
(COND
((EQUAL B ENCODE)
(PERMIT:USER:INTERRUPT)
(MATCHQ (CLASS USER:INTERRUPT:AT:CODING ←←USER:INTERRUPT:DEMONS)
$USER:INTERRUPT:DEMONS])
(USER:INTERRUPT:AT:DEBUG
[LAMBDA (S:EXP)
(COND
((EQUAL B CLARIFY:IMPROBABLE:SITUATION)
(PERMIT:USER:INTERRUPT)
(MATCHQ (CLASS USER:INTERRUPT:AT:DEBUG ←←USER:INTERRUPT:DEMONS)
$USER:INTERRUPT:DEMONS])
(USER:INTERRUPT:AT:END
[LAMBDA (S:EXP)
(COND
((EQUAL B OPTIMIZE)
(PERMIT:USER:INTERRUPT)
(MATCHQ (CLASS USER:INTERRUPT:AT:END ←←USER:INTERRUPT:DEMONS)
$USER:INTERRUPT:DEMONS])
(USER:INTERRUPT:AT:PHASES
[LAMBDA (S:EXP)
(COND
((MEMBER B USER:INTERRUPT:COPY:OF:PHASES)
(PERMIT:USER:INTERRUPT)
(SETQ USER:INTERRUPT:COPY:OF:PHASES (PULLOUT B
USER:INTERRUPT:COPY:OF:PHASES])
(WHEN:VALUE
[LAMBDA (B:CALL)
(SETQ EXP:A (GETP (CAR B:CALL)
EXPLICIT:ARGS))
(FOR NEW:ARG IN EXP:A AS OLD:ARG IN (CDR B:CALL)
DO (SET NEW:ARG OLD:ARG))
(ATTEMPT (EVAL (GETP (CAR B:CALL)
EXPLICIT:ARGS:CHECK))
THEN (A:BEING:WHEN (CAR B:CALL))
ELSE -1000])
)
(LISPXPRINT (QUOTE PUP3FNS)
T)
(RPAQQ PUP3FNS
(A:BEING:ORDER A:BEING:WHEN AD ADD:BEING BLIND:BREAK:UP
CHANGEB COLON:BACK COLON:BREAK DIMENSION1
DIMENSION2 DIMENSION3 DISK:DUMP DOT:PROD
DUMP:BEING FAST:BEING:COMPLEX FIRST:FEW FOREACH
INITIALS LOOKUP MAIN:WORDS
PERMIT:USER:INTERRUPT POP:DEMONS
PROCESS:USER:INTERRUPT PULLOUT PUSH:DEMONS
SEMI:COMPILE SETDIFFERENCE SETINTERSECTION
SETUNION SINGLETON SIZE SPECIFICITY:CHECK:DEMON
START SUBSTITUTE TRY:TO:SATISFY
USER:INTERRUPT:AT:ADAPTING
USER:INTERRUPT:AT:CODING
USER:INTERRUPT:AT:DEBUG USER:INTERRUPT:AT:END
USER:INTERRUPT:AT:PHASES WHEN:VALUE))
(LISPXPRINT (QUOTE PUP3VARS)
T)
[RPAQQ PUP3VARS
(SET:OF:BEINGS BEING MINOR:WORDS BREAKUP:LIST
COMPILABLE:BEING:PARTS INFERIOR SUPERIOR
NON:EXECUTABLE NON:EVAL:BEING:PARTS
EVAL:BEING:PARTS SET:OF:BEING:PARTS
PROGRAM:WRITING:PHASES EVAL
(VARS * (APPEND PUP3FNS SET:OF:BEINGS
SET:OF:BEING:PARTS))
(COMS * (LIST (APPEND (QUOTE (PROP ALL))
SET:OF:BEINGS)))
(P (MAPC SET:OF:BEINGS SEMI:COMPILE]
(RPAQQ SET:OF:BEINGS
(ANALYZE:IMPLICATIONS BETTER CHOOSE:FROM CONCEPT:FORMATION
EXTRACT:RELEVANT:SUBSET GET:NAME
GET:NEW:INFORMATION MESSAGE
OBTAIN:USABLE:INFORMATION
PROPOSE:PLAUSIBLE:NAMES SATISFY SERVE
TRANSLATE TRY:BEING WRITE:PROGRAM))
(RPAQQ BEING BEING)
(RPAQQ MINOR:WORDS
(A AT DO DOES FOR IN PROGRAM THE TO WHICH WHILE WRITE))
(RPAQQ BREAKUP:LIST (:))
(RPAQQ COMPILABLE:BEING:PARTS
(META:CODE COMMENTS PRE:REQUISITES CO:REQUISITES
POST:REQUISITES EXPLICIT:ARGS EXPLICIT:ARGS:CHECK
IMPLICIT:ARGS))
(RPAQQ INFERIOR INFERIOR)
(RPAQQ SUPERIOR SUPERIOR)
(RPAQQ NON:EXECUTABLE NON:EXECUTABLE)
(RPAQQ NON:EVAL:BEING:PARTS
(IDEN IMPLICIT:ARGS EXPLICIT:ARGS WHEN META:CODE COMMENTS
PRE:REQUISITES CO:REQUISITES POST:REQUISITES
EXPLICIT:ARGS:CHECK DEMONS MAIN:EFFECTS MINOR:EFFECTS
COMPLEXITY:VECTOR GENERALIZATIONS SPECIALIZATIONS
ALTERNATIVES))
(RPAQQ EVAL:BEING:PARTS (WHAT HOW WHY AFFECTS SPEC:WHY))
(RPAQQ SET:OF:BEING:PARTS
(IDEN IMPLICIT:ARGS EXPLICIT:ARGS EXPLICIT:ARGS:CHECK WHAT HOW
WHY SPEC:WHY MAIN:EFFECTS MINOR:EFFECTS WHEN META:CODE
COMMENTS PRE:REQUISITES CO:REQUISITES POST:REQUISITES
DEMONS AFFECTS COMPLEXITY:VECTOR GENERALIZATIONS
SPECIALIZATIONS ALTERNATIVES))
(RPAQQ PROGRAM:WRITING:PHASES (OBTAIN:USABLE:INFORMATION
USE:INFORMATION
FILL:IN:UNDEFINED:SECTION
ADAPT:PRECONCIVED:FUNCTION
CLARIFY:IMPROBABLE:SITUATION
FIX:INCORRECT:PIECE
OPTIMIZE))
(RPAQQ EVAL EVAL)
(RPAQQ A:BEING:ORDER A:BEING:ORDER)
(RPAQQ A:BEING:WHEN A:BEING:WHEN)
(RPAQQ AD AD)
(RPAQQ ADD:BEING ADD:BEING)
(RPAQQ BLIND:BREAK:UP NOBIND)
(RPAQQ CHANGEB CHANGEB)
(RPAQQ COLON:BACK NOBIND)
(RPAQQ COLON:BREAK NOBIND)
(RPAQQ DIMENSION1 NOBIND)
(RPAQQ DIMENSION2 NOBIND)
(RPAQQ DIMENSION3 NOBIND)
(RPAQQ DISK:DUMP DISK:DUMP)
(RPAQQ DOT:PROD DOT:PROD)
(RPAQQ DUMP:BEING DUMP:BEING)
(RPAQQ FAST:BEING:COMPLEX FAST:BEING:COMPLEX)
(RPAQQ FIRST:FEW NOBIND)
(RPAQQ FOREACH FOREACH)
(RPAQQ INITIALS NOBIND)
(RPAQQ LOOKUP LOOKUP)
(RPAQQ MAIN:WORDS NOBIND)
(RPAQQ PERMIT:USER:INTERRUPT PERMIT:USER:INTERRUPT)
(RPAQQ POP:DEMONS POP:DEMONS)
(RPAQQ PROCESS:USER:INTERRUPT PROCESS:USER:INTERRUPT)
(RPAQQ PULLOUT PULLOUT)
(RPAQQ PUSH:DEMONS PUSH:DEMONS)
(RPAQQ SEMI:COMPILE SEMI:COMPILE)
(RPAQQ SETDIFFERENCE SETDIFFERENCE)
(RPAQQ SETINTERSECTION SETINTERSECTION)
(RPAQQ SETUNION SETUNION)
(RPAQQ SINGLETON SINGLETON)
(RPAQQ SIZE SIZE)
(RPAQQ SPECIFICITY:CHECK:DEMON SPECIFICITY:CHECK:DEMON)
(RPAQQ START START)
(RPAQQ SUBSTITUTE SUBSTITUTE)
(RPAQQ TRY:TO:SATISFY TRY:TO:SATISFY)
(RPAQQ USER:INTERRUPT:AT:ADAPTING USER:INTERRUPT:AT:ADAPTING)
(RPAQQ USER:INTERRUPT:AT:CODING USER:INTERRUPT:AT:CODING)
(RPAQQ USER:INTERRUPT:AT:DEBUG USER:INTERRUPT:AT:DEBUG)
(RPAQQ USER:INTERRUPT:AT:END USER:INTERRUPT:AT:END)
(RPAQQ USER:INTERRUPT:AT:PHASES USER:INTERRUPT:AT:PHASES)
(RPAQQ WHEN:VALUE WHEN:VALUE)
(RPAQQ ANALYZE:IMPLICATIONS ANALYZE:IMPLICATIONS)
(RPAQQ BETTER BETTER)
(RPAQQ CHOOSE:FROM CHOOSE:FROM)
(RPAQQ CONCEPT:FORMATION CONCEPT:FORMATION)
(RPAQQ EXTRACT:RELEVANT:SUBSET EXTRACT:RELEVANT:SUBSET)
(RPAQQ GET:NAME GET:NAME)
(RPAQQ GET:NEW:INFORMATION GET:NEW:INFORMATION)
(RPAQQ MESSAGE MESSAGE)
(RPAQQ OBTAIN:USABLE:INFORMATION OBTAIN:USABLE:INFORMATION)
(RPAQQ PROPOSE:PLAUSIBLE:NAMES PROPOSE:PLAUSIBLE:NAMES)
(RPAQQ SATISFY SATISFY)
(RPAQQ SERVE SERVE)
(RPAQQ TRANSLATE TRANSLATE)
(RPAQQ TRY:BEING TRY:BEING)
(RPAQQ WRITE:PROGRAM WRITE:PROGRAM)
(RPAQQ IDEN IDEN)
(RPAQQ IMPLICIT:ARGS IMPLICIT:ARGS)
(RPAQQ EXPLICIT:ARGS EXPLICIT:ARGS)
(RPAQQ EXPLICIT:ARGS:CHECK EXPLICIT:ARGS:CHECK)
(RPAQQ WHAT WHAT)
(RPAQQ HOW HOW)
(RPAQQ WHY WHY)
(RPAQQ SPEC:WHY SPEC:WHY)
(RPAQQ MAIN:EFFECTS MAIN:EFFECTS)
(RPAQQ MINOR:EFFECTS MINOR:EFFECTS)
(RPAQQ WHEN WHEN)
(RPAQQ META:CODE META:CODE)
(RPAQQ COMMENTS COMMENTS)
(RPAQQ PRE:REQUISITES PRE:REQUISITES)
(RPAQQ CO:REQUISITES CO:REQUISITES)
(RPAQQ POST:REQUISITES POST:REQUISITES)
(RPAQQ DEMONS DEMONS)
(RPAQQ AFFECTS AFFECTS)
(RPAQQ COMPLEXITY:VECTOR COMPLEXITY:VECTOR)
(RPAQQ GENERALIZATIONS GENERALIZATIONS)
(RPAQQ SPECIALIZATIONS SPECIALIZATIONS)
(RPAQQ ALTERNATIVES ALTERNATIVES)
(PUTPROPS ANALYZE:IMPLICATIONS IDEN [((ANALYZE:IMPLICATIONS ←NEW:INFO)
(LIST ANALYZE:IMPLICATIONS
(TRANSLATE $NEW:INFO]
BEING T
IMPLICIT:ARGS NIL
EXPLICIT:ARGS (NEW:INFO)
WHAT (TUPLE ANALYZE THE IMPLICATIONS
OF SOME OF THE NEW
INFORMATION (@ NEW:INFO))
HOW (TUPLE BY LOCALIZING THE EFFECTS
OF THE NEW INFO AND
STUDYING THEM)
WHY (TUPLE TO IMPROVE THE
UNDERSTANDING THAT PUP HAS
OF THE NEW INFORMATION
(@ NEW:INFO))
SPEC:WHY (NO SPECIAL REASON)
WHEN (((IS (USABLE INFORMATION ←←ANY))
-60
(TUPLE BECAUSE WE SHOULD USE
$ANY BEFORE WORRYING
ABOUT (@ NEW:INFO)))
(T (DIFFERENCE 50 (SIZE NEW:INFO)
)
(TUPLE BECAUSE THE SIZE OF
THE NEW INFORMATION
(@ NEW:INFO)
AFFECTS HOW EASILY AND
FRUITFULLY AN ANALYSIS
OF IT WILL BE)))
META:CODE (PROGN (LOCATE:AFFECTED:AREA
NEW:INFO)
(PREDICT:AFFECT
NEW:INFO)
(EVALUATE:AFFECT
NEW:INFO))
COMMENTS NIL
PRE:REQUISITES NIL
CO:REQUISITES NIL
POST:REQUISITES NIL
EXPLICIT:ARGS:CHECK (IS
(RELEVANT
INFORMATION
(@ NEW:INFO)))
DEMONS NIL
MAIN:EFFECTS (((AWARE PUP
(IMPLICATIONS
←NEW:INFO))
(ANALYZE:IMPLICATIONS
$NEW:INFO)))
MINOR:EFFECTS NIL
AFFECTS (TUPLE (LOCATE AFFECTED:AREA
CALLED)
(PREDICT:AFFECT CALLED)
(EVALUATE:AFFECT CALLED)
)
COMPLEXITY:VECTOR (.4 .7 .7 .5)
GENERALIZATIONS NIL
SPECIALIZATIONS NIL
ALTERNATIVES NIL)
(PUTPROPS BETTER IDEN [((BETTER ←B1 ←B2)
(LIST BETTER (TRANSLATE $B1)
(TRANSLATE $B2]
BEING T
IMPLICIT:ARGS NIL
EXPLICIT:ARGS (B1 B2)
WHAT (TUPLE DECIDE WHICH OF (@ B1)
(@ B2)
IS MORE A PROPOS TO TRY)
HOW (TUPLE COMPARE THE WHEN PARTS OF
(@ (CAR B1))
AND
(@ (CAR B2))
AND, IF NECESSARY, COMPARE THEIR
COMPLEXITY VECTORS)
WHY (TUPLE PUP CAN ONLY TRY AT MOST ONE OF
(@ (CAR B1))
AND
(@ (CAR B2))
AT A TIME)
SPEC:WHY (TUPLE WE MUST SELECT THE BEST BEING FROM
(TRANSLATE GET:NEW:INFORMATION
ANALYZE:IMPLICATIONS
EXTRACT:RELEVANT:SUBSET)
THE WHEN PART OF THE
GET:NEW:INFORMATION IS INFERIOR TO
THE WHEN PART OF TRANSLATE THE WHEN
PART OF THE ANALYZE:IMPLICATIONS IS
INFERIOR TO THE WHEN PART OF
TRANSLATE)
WHEN NIL
META:CODE (ATTEMPT
(PROGN
(SETQ B1NEW B1)
(SETQ B2NEW B2)
(SETQ B1NEW
(CONS (CAR B1NEW)
(MAPCAR (CDR B1NEW)
EVAL)))
(SETQ B2NEW
(CONS (CAR B2NEW)
(MAPCAR (CDR B2NEW)
EVAL)))
(SETQ WHEN:DIFF (DIFFERENCE
(WHEN:VALUE B1NEW)
(WHEN:VALUE B2NEW)))
[COND
[(EQP WHEN:DIFF 0)
(SETQ RESULT1 (A:BEING:ORDER
(CAR B1NEW)
(CAR B2NEW)))
(/SETQ
BECAUSE
(APPEND
BECAUSE
(TUPLE
THE WHEN PARTS OF
(@ (CAR B1NEW))
AND
(@ (CAR B2NEW))
ARE EQUAL AND THE FORMER IS
[@ (COND (RESULT1
(QUOTE LESS))
(T (QUOTE MORE]
COMPLEX THAN THE LATTER BEING]
(T
(SETQ RESULT1 (NOT (MINUSP
WHEN:DIFF)))
(/SETQ
BECAUSE
(APPEND
BECAUSE
(TUPLE THE WHEN PART OF THE
(@ (CAR B1NEW))
IS
(@ (COND (RESULT1
SUPERIOR)
(T INFERIOR)))
TO THE WHEN PART OF
(@ (CAR B2NEW]
RESULT1))
COMMENTS NIL
PRE:REQUISITES NIL
CO:REQUISITES NIL
POST:REQUISITES NIL
EXPLICIT:ARGS:CHECK (COND
((AND
(EQUAL T
(GETP (CAR B1)
BEING))
(EQUAL T
(GETP (CAR B2)
BEING)))
T)
(T (FAIL)))
DEMONS NIL
MAIN:EFFECTS NIL
MINOR:EFFECTS NIL
AFFECTS NIL
COMPLEXITY:VECTOR NIL
GENERALIZATIONS NIL
SPECIALIZATIONS NIL
ALTERNATIVES NIL)
(PUTPROPS CHOOSE:FROM IDEN [((CHOOSE:FROM ←S)
(LIST CHOOSE:FROM (TRANSLATE $S]
BEING T
IMPLICIT:ARGS NIL
EXPLICIT:ARGS (S)
WHAT (TUPLE CHOOSE THE BEST BEING FROM THE SET
(@ S)
OF BEINGS)
HOW (TUPLE COMPARE FEATURES OF THE ELEMENTS OF
THE SET (@ S)
OF BEINGS)
WHY (TUPLE BECAUSE THE FLOW OF CONTROL OF A
PROGRAM MUST BE DETERMINATE)
SPEC:WHY (TUPLE WE CAN ONLY TRY TO OBTAIN
USABLE INFORMATION IN ONE WAY
AT A TIME)
WHEN NIL
META:CODE [PROG
(BEST)
(/SETQ S (CDR S))
(SETQ BEST (CAR S))
[/SETQ
BECAUSE
(TUPLE
TUPLE WE MUST SELECT THE BEST
BEING FROM
(@ (MAPCAR S (QUOTE CAR]
[COND
[(SINGLETON S)
(/SETQ
BECAUSE
(APPEND
BECAUSE
(TUPLE AND, TRIVIALLY,
(@ (CAR S))
IS OUR ONLY CHOICE]
(T (FOR S1 IN (CDR S)
DO
(COND ((BETTER S1 BEST)
(SETQ BEST S1]
(/SETQ
BECAUSE
(TUPLE
TUPLE NOW THAT WE HAVE SELECTED
(@ (CAR BEST))
AS THE BEST BEING OUT OF THE
SET (@ (MAPCAR S (QUOTE CAR)))
WE MUST CARRY OUT (@ BEST)))
(ATTEMPT
(EVAL BEST)
THEN T ELSE
(CHOOSE:FROM
(EVAL
(CONS (QUOTE CLASS)
(@ (PULLOUT BEST S]
COMMENTS NIL
PRE:REQUISITES NIL
CO:REQUISITES NIL
POST:REQUISITES NIL
EXPLICIT:ARGS:CHECK (PROGN
[FOR
S1 IN (CDR S)
DO
(COND
(NIL 6)
((EQUAL
T
(GETP
(CAR S1)
BEING))
T)
(T (FAIL]
(MATCHQ (CLASS ←←S3)
(@ S)))
DEMONS NIL
MAIN:EFFECTS [((BETTER:THAN ←S1 ←S2)
(CHOOSE:FROM (CLASS $S1 $$S2]
MINOR:EFFECTS NIL
AFFECTS NIL
COMPLEXITY:VECTOR (.2 .4 .6 .5)
GENERALIZATIONS NIL
SPECIALIZATIONS NIL
ALTERNATIVES NIL
NIL T)
(PUTPROPS CONCEPT:FORMATION BEING T
IDEN (((CONCEPT FORMATION)
(CONCEPT:FORMATION))
((FORM CONCEPTS)
(CONCEPT:FORMATION))
((CONCEPT:LEARNING)
(CONCEPT:FORMATION))
((CONCEPT LEARNING)
(CONCEPT:FORMATION)))
IMPLICIT:ARGS NIL
EXPLICIT:ARGS NIL
WHAT (TUPLE LEARN HOW TO IMPOSE A CONCEPT
STRUCTURING UPON A DOMAIN;
LEARN HOW TO CHARACTERIZE, OR
AT LEAST DISTINGUISH, VARIOUS
CONCEPTS)
HOW (TUPLE BY CHOOSING THE DESIRED TYPE
OF CONCEPT FORMATION CALLED
FOR, AND THEN CARRYING IT OUT)
WHY (TUPLE CONCEPT:LEARNING IS NECESSARY
TO CONCEPT KNOWLEDGE)
SPEC:WHY (NO SPECIAL REASON)
WHEN (((IS (ABILITY ?TYPE:OF:C:F))
-70
(TUPLE BECAUSE IF WE CAN ALREADY
DO ?TYPE:OF:C:F THEN WE
SHOULDNT TRY TO DO IT OVER
AGAIN))
((IS (NECESSARY (CHARACTERIZE
CLASSES)))
88
(TUPLE BECAUSE CONCEPT FORMATION
IS A GOOD WAY TO GET A
CHARACTERIZATION OF CLASSES)
)
((ATTEMPT (IS (NEW INFORMATION
←←ANYTHING))
THEN NIL ELSE T)
40
(TUPLE BECAUSE NEW INFORMATION
MIGHT ALTER OUR COURSE OF
ACTION))
((IS (NEW INFORMATION ←←ANYTHING))
-60
(TUPLE BECAUSE NEW INFORMATION
MIGHT ALTER OUR COURSE OF
ACTION)))
META:CODE (EVAL (LIST ?TYPE:OF:C:F))
COMMENTS NIL
PRE:REQUISITES [(AWARE USER
(PUP IS ABOUT TO
WORK ON
CONCEPT
FORMATION))
(TYPE OF
CONCEPT:FORMATION IS
TYPE:OF:C:F)
(AWARE
USER
(THE TYPE OF CONCEPT
FORMATION PUP IS
ABOUT TO WORK ON
IS (@ TYPE:OF:C:F]
CO:REQUISITES NIL
POST:REQUISITES ((AWARE
USER
(PUP HAS THOUGHT ABOUT
THE (@
TYPE:OF:C:F)
TYPE OF
CONCEPT:FORMATION)))
EXPLICIT:ARGS:CHECK T
DEMONS (INFERENCE:DEMONS ATTENTION:DEMONS)
MAIN:EFFECTS (((ABILITY (LEARN CONCEPTS))
(CONCEPT:FORMATION)))
MINOR:EFFECTS NIL
AFFECTS ((EVAL TYPE:OF:C:F)
CALLED)
COMPLEXITY:VECTOR (.1
(PLUS
.2
(TIMES
.8
(DIMENSION2
TYPE:OF:C:F)))
(PLUS
.1
(TIMES
.9
(DIMENSION3
TYPE:OF:C:F)))
.5)
GENERALIZATIONS (ATTEND LEARN
INDUCTIVE:INFERENCE)
SPECIALIZATIONS (THE 9 DECISIONS GO HERE)
ALTERNATIVES ((GRAMMATICAL:INFERENCE
PATTERN:RECOGNITION
SIMULATED:EVOLUTION)))
(PUTPROPS EXTRACT:RELEVANT:SUBSET IDEN [((EXTRACT:RELEVANT:SUBSET
←NEW:INFO)
(LIST
EXTRACT:RELEVANT:SUBSET
(TRANSLATE $NEW:INFO]
BEING T
IMPLICIT:ARGS NIL
EXPLICIT:ARGS (NEW:INFO)
WHAT (TUPLE EXTRACT THE SMALL
NUCLEUS OF RELEVANT
INFO FROM (@ NEW:INFO))
HOW (TUPLE BY DELETING ALL THE
IRRELEVANT INFO FROM
(@ NEW:INFO))
WHY (TUPLE ONLY A SMALL AMOUNT OF
INFO IS RELEVANT TO ANY
SPECIFIC PROBLEM, AND
PUP CANNOT HANDLE A
LARGE MASS OF INFO
EFFICIENTLY)
SPEC:WHY (NO SPECIAL REASON)
WHEN (((GREATERP (SIZE NEW:INFO)
50)
70
(TUPLE BECAUSE IF THE NEW
INFO IS OVER 50
TOKENS LONG, THEN WE
CANNOT EFFICIENTLY
COMPREHEND IT))
((LESSP (SIZE NEW:INFO)
12)
-80
(TUPLE BECAUSE IF THE NEW
INFO IS LESS THAN A
DOZEN TOKENS LONG
THEN WE SHOULD EASILY
BE ABLE TO PROCESS IT
AS IT IS)))
META:CODE [PROGN
(
USE:PROGRAMMING:KNOWLEDGE APPLIED TO NEW:INFO SO:AS:TO KEEP
(TUPLE RELEVANT NEW:INFO))
(ASSERT
(RELEVANT
(@ NEW:INFO]
COMMENTS NIL
PRE:REQUISITES NIL
CO:REQUISITES NIL
POST:REQUISITES NIL
EXPLICIT:ARGS:CHECK (IS
(NEW
INFORMATION
(@ NEW:INFO)
))
DEMONS NIL
MAIN:EFFECTS (((RELEVANT ←NEW:INFO)
(
EXTRACT:RELEVANT:SUBSET $NEW:INFO)))MINOR:EFFECTS NIL
AFFECTS ((
APPLY:PROGRAMMING:KNOWLEDGE CALLED))COMPLEXITY:VECTOR (.3 .6 .6 .5)
GENERALIZATIONS NIL
SPECIALIZATIONS NIL
ALTERNATIVES NIL)
(PUTPROPS GET:NAME BEING T
IDEN (((CALL ←←OBJECT ←ITS:NAME)
(TUPLE GET:NAME $OBJECT $ITS:NAME))
(NAME ←OB1 ←OB2)
(TUPLE GET:NAME $OB1 $OB2))
IMPLICIT:ARGS NIL
EXPLICIT:ARGS (EXPRESSION NEW:NAME)
WHAT (TUPLE IDENTIFY THE NEW:NAME (@ NEW:NAME)
WITH THE EXPRESSION (@ EXPRESSION))
HOW (TUPLE PUP WILL ASK THE USER WHAT HE WISHES TO
CALL (@ EXPRESSION))
WHY (TUPLE BOTH PUP AND THE USER MAY NEED TO REFER
TO (@ EXPRESSION))
SPEC:WHY [TUPLE WE CALL THE SIMPLEST BEING WHICH
CAN BRING ABOUT THE EFFECT
(AWARE USER
(PUP WANTS USER TO TYPE IN
NAME FOR (
CONCEPT:FORMATION]
WHEN (((IS (NAME (@ EXPRESSION)
←ANYTHING))
-90
(TUPLE BECAUSE PUP FROWNS ON AMBIGUITY))
((ATTEMPT (IS (NAME (@ EXPREESION)
←ANYTHING))
THEN NIL ELSE T)
50
(TUPLE BECAUSE MOST THINGS SHOULD HAVE
NAMES)))
META:CODE [ASSERT
(NEW:NAME
(@ EXPRESSION)
(@ (COND ((ATOM NEW:NAME)
(SET NEW:NAME (READ)))
(T (SET (EVAL NEW:NAME)
(READ]
COMMENTS NIL
PRE:REQUISITES [(PLAUSIBLE NAMES FOR (@ EXPRESSION)
HAVE BEEN STUDIED)
(AWARE USER (PLAUSIBLE
NAMES FOR (@ EXPRESSION)))
(AWARE USER
(PUP WANTS USER TO TYPE IN
NAME FOR (@ EXPRESSION]
CO:REQUISITES NIL
POST:REQUISITES [(AWARE
USER
(PUP
AND USER ARE NOW ABLE TO
REFER TO (@ EXPRESSION)
AS
(@ (EVAL NEW:NAME))
WHICH IS
(@ (EVAL (EVAL NEW:NAME]
EXPLICIT:ARGS:CHECK T
DEMONS NIL
MAIN:EFFECTS [((ABILITY (REFER PUP ←E AS ←NM))
(GET:NAME $E $NM))
((ABILITY (REFER USER ←E AS ←NM))
(GET:NAME $E $NM))
((NAME ←OB ←NM)
(GET:NAME $OB (TUPLE QUOTE $NM]
MINOR:EFFECTS NIL
AFFECTS NIL
COMPLEXITY:VECTOR (.1 .3 .2 .5)
GENERALIZATIONS NIL
SPECIALIZATIONS NIL
ALTERNATIVES NIL
EFFECTS T)
(PUTPROPS GET:NEW:INFORMATION IDEN (((GET:NEW:INFORMATION ←NEW:INFO)
(TUPLE GET:NEW:INFORMATION
$NEW:INFO)))
BEING T
IMPLICIT:ARGS NIL
EXPLICIT:ARGS (NEW:INFO)
WHAT (TUPLE GET THE NEW PIECE OF
INFORMATION AND CALL IT
NEW:INFO)
HOW (TUPLE ASK THE USER FOR NEW
INFORMATION)
WHY (TUPLE WE NEED NEW INFORMATION; SEE
ESPECIALLY SPEC:WHY)
SPEC:WHY (TUPLE NOW THAT WE HAVE
SELECTED
GET:NEW:INFORMATION AS
THE BEST BEING OUT OF
THE SET
(TRANSLATE
GET:NEW:INFORMATION
ANALYZE:IMPLICATIONS
EXTRACT:RELEVANT:SUBSET)
WE MUST CARRY OUT
(GET:NEW:INFORMATION
U))
WHEN (((ATTEMPT (IS (NEW INFORMATION
←←ANY))
THEN
(FAIL)
ELSE T)
50
(TUPLE BECAUSE AN ABSENCE OF NEW
INFO ABDUCTIVELY IMPLIES
A NEED FOR NEW INFO))
((IS (NEW INFORMATION ←←ANY))
-60
(TUPLE BECAUSE THE PRESENCE OF
UNASSIMILATED NEW INFO IS
AN OMEN THAT WE HAVEN'T
DONE ALL WE MIGHT TO
PROCESS $ANY)))
META:CODE [PROGN
[ASSERT
(NEW
INFORMATION
(@ (SET NEW:INFO
(READ]
(ATTEMPT
[DENY
(IS
(AWARE USER
(PUP WANTS
←←ANYTHING:AT:ALL]
THEN
(ASSERT
(AWARE USER
(PUP WANTED
$$ANYTHING:AT:ALL]
COMMENTS NIL
PRE:REQUISITES ((AWARE USER
(PUP WANTS ←←W)))
CO:REQUISITES NIL
POST:REQUISITES NIL
EXPLICIT:ARGS:CHECK T
DEMONS (TUPLE SPECIFICITY:CHECK:DEMON)
MAIN:EFFECTS (((NEW INFORMATION ←←W)
(GET:NEW:INFORMATION
$$W)))
MINOR:EFFECTS $W
AFFECTS NIL
COMPLEXITY:VECTOR (.1 .1 .1 .5)
GENERALIZATIONS NIL
SPECIALIZATIONS NIL
ALTERNATIVES NIL)
(PUTPROPS MESSAGE IDEN (((MESSAGE ←M)
(TUPLE MESSAGE $M)))
BEING T
IMPLICIT:ARGS NIL
EXPLICIT:ARGS (M)
WHAT (TUPLE GIVE THE USER THE MESSAGE (@ M))
HOW (TUPLE THE USER WILL READ THE MESSAGE
(@ M)
THAT PUP TYPES OUT)
WHY (TUPLE SO THAT THE USER MAY ASSIMILATE THE
INFORMATION IN THE MESSAGE (@ M))
WHEN (((AWARE USER $M)
-200))
META:CODE [PROGN (PRIN1 "PUP: ")
(PRINT M)
(TERPRI)
(ASSERT (LASTRESPONDER PUP))
(DENY (LASTRESONDER USER))
(ASSERT (AWARE USER (@ M)))
(ASSERT (READ USER (@ M]
COMMENTS NIL
PRE:REQUISITES NIL
CO:REQUISITES NIL
POST:REQUISITES NIL
EXPLICIT:ARGS:CHECK T
DEMONS NIL
MAIN:EFFECTS (((AWARE USER ←M)
(MESSAGE $M))
((READ USER ←M)
(MESSAGE $M)))
MINOR:EFFECTS ((LASTRESPONDER PUP))
AFFECTS NIL
COMPLEXITY:VECTOR (0.0 .1 .9 .7)
GENERALIZATIONS (COMMUNICATE I/O)
SPECIALIZATIONS (RESPOND QUERY)
ALTERNATIVES NIL
SPEC:WHY [TUPLE WE CALL THE SIMPLEST BEING WHICH
CAN BRING ABOUT THE EFFECT
(AWARE USER
(PUP WANTS USER TO TYPE IN
NAME FOR (
CONCEPT:FORMATION]
NIL (WE CALL THE SIMPLEST BEING WHICH CAN BRING
ABOUT THE EFFECT
(AWARE USER (PUP WANTS ANY TASK))))
(PUTPROPS OBTAIN:USABLE:INFORMATION IDEN (((OBTAIN:USABLE:INFORMATION
←U)
(TUPLE
OBTAIN:USABLE:INFORMATION $U))
)
BEING T
IMPLICIT:ARGS NIL
EXPLICIT:ARGS (U)
WHAT (TUPLE OBTAIN SOME
INFORMATION WHICH CAN
BE USED)
HOW (TUPLE OBTAIN NEW FACTS ABOUT
OLD INFORMATION, OR
OBTAIN TOTALLY NEW
INFORMATION)
WHY (TUPLE PUP HAS NO MORE
INFORMATION THAT IT
CAN USE TO PROGRESS)
SPEC:WHY (TUPLE NOW THAT WE HAVE
SELECTED
GET:NEW:INFORMATION AS
THE BEST BEING
OUT OF THE SET
(TRANSLATE
GET:NEW:INFORMATION
ANALYZE:IMPLICATIONS
EXTRACT:RELEVANT:SUBSET)
WE MUST CARRY OUT
(
GET:NEW:INFORMATION U)) WHEN NIL
META:CODE [PROGN
(/SETQ BECAUSE
(TUPLE TUPLE
WE CAN
ONLY TRY
TO
OBTAIN
USABLE
INFORMATION IN
ONE WAY
AT A
TIME))
(CHOOSE:FROM
(CLASS
(TRANSLATE U)
(
GET:NEW:INFORMATION U)
(
ANALYZE:IMPLICATIONS U)
(
EXTRACT:RELEVANT:SUBSET U] COMMENTS NIL
PRE:REQUISITES NIL
CO:REQUISITES NIL
POST:REQUISITES NIL
EXPLICIT:ARGS:CHECK T
DEMONS NIL
MAIN:EFFECTS (((USABLE
(NEW INFORMATION
←U))
(
OBTAIN:USABLE:INFORMATION $U))
((NEW INFORMATION
←U)
(
OBTAIN:USABLE:INFORMATION $U))) MINOR:EFFECTS NIL
AFFECTS (TUPLE (CHOOSE:FROM
CALLED)
(TRANSLATE
POSSIBLE:CALLED)
(
GET:NEW:INFORMATION POSSIBLE:CALLED)
(
ANALYZE:IMPLICATIONS POSSIBLE:CALLED)
(
EXTRACT:RELEVANT:SUBSET POSSIBLE:CALLED))
COMPLEXITY:VECTOR (.5 .5 .5 .5)
GENERALIZATIONS NIL
SPECIALIZATIONS NIL
ALTERNATIVES NIL)
(PUTPROPS PROPOSE:PLAUSIBLE:NAMES BEING T
IDEN (((PROPOSE PLAUSIBLE NAMES FOR
←←SOMETHING)
(PROPOSE:PLAUSIBLE:NAMES
$SOMETHING))
((PROPOSE:PLAUSIBLE:NAMES
←←SOMETHING)
(PROPOSE:PLAUSIBLE:NAMES
$SOMETHING)))
IMPLICIT:ARGS NIL
EXPLICIT:ARGS (EXPRES)
EXPLICIT:ARGS:CHECK [COND
((ATOM EXPRES)
(SETQ
EXPRES
(
COLON:BREAK EXPRES)))
(T
(SETQ
EXPRES
(PROG
(TEMP1)
[FOR
XXX
IN
EXPRES DO
(SETQ
TEMP1
(
APPEND TEMP1 (COLON:BREAK XXX]
(RETURN
TEMP1]
WHAT (TUPLE PROPOSE PLAUSIBLE NAMES
FOR (@ EXPRES))
HOW (TUPLE USE PARLOR PSYCHOLOGY TO
EXTRACT MNEMONIC
CONTRACTIONS OF
(@ EXPRES))
WHY (TUPLE AID THE USER OR PUP IN
CHOOSING A EXPRES FOR
THE OBJECT (@ EXPRES))
SPEC:WHY (TUPLE WE CALL THE
SIMPLEST BEING
WHICH CAN BRING
ABOUT THE EFFECT
(PLAUSIBLE
NAMES FOR
(CONCEPT:FORMATION
)
HAVE BEEN STUDIED)
)
MAIN:EFFECTS (((PLAUSIBLE NAMES FOR
←SOMETHING
HAVE BEEN
STUDIED)
(
PROPOSE:PLAUSIBLE:NAMES $SOMETHING)))
MINOR:EFFECTS NIL
WHEN ((T
(ATTEMPT
(IS (PLAUSIBLE
NAMES FOR
(@ EXPRES)
HAVE BEEN STUDIED))
THEN -99 ELSE 33)
(TUPLE BECAUSE WE SHOULDNT
WASTE TOO MUCH TIME
GETTING PLAUSIBLE
NAMES, YET WE ALSO
SHOULDNT COMPLETELY
LET THE USER FEND
FOR HIMSELF ON THIS
SUBJECT)))
META:CODE (PROG
(P)
(SETQ
P
(MAPCAR
[LIST
(INITIALS EXPRES)
(MAIN:WORDS
EXPRES)
(FIRST:FEW
(INITIALS
EXPRES))
(FIRST:FEW
(MAIN:WORDS
EXPRES))
(FIRST:FEW
(INITIALS
(MAIN:WORDS
EXPRES)))
(LIST
(PACK
(INITIALS
EXPRES)))
(LIST
(PACK
(FIRST:FEW
(INITIALS
EXPRES]
(QUOTE COLON:BACK)))
(SETQ P (SETDIFFERENCE
P KNOWN:NAMES))
(SETQ P (INTERSECTION
P P))
[MATCHQ
←MSG
(ASSERT
((@ P)
IS THE SET OF
PLAUSIBLE NAMES OF
(@ EXPRES]
(ASSERT
(PLAUSIBLE
NAMES FOR
(@ EXPRES)
HAVE BEEN STUDIED))
(RETURN P))
COMMENTS NIL
PRE:REQUISITES NIL
CO:REQUISITES NIL
POST:REQUISITES ((AWARE USER $MSG))
DEMONS (TUPLE
FRINGE:OF:CONCIOUSNESS:DEMON
PSYCHOLOGY:DEMON)
AFFECTS NIL
COMPLEXITY:VECTOR (.1 .2 .3 .5)
GENERALIZATIONS NIL
SPECIALIZATIONS NIL
ALTERNATIVES NIL)
(PUTPROPS SATISFY IDEN [((SATISFY ←G)
(LIST SATISFY (TRANSLATE $G]
IMPLICIT:ARGS NIL
EXPLICIT:ARGS (G)
WHAT (TUPLE SATISFY THE SIMPLE SUBGOAL
(@ G))
HOW (TUPLE PASS CONTROL TO THE SIMPLEST SUFFICIENT
BEING)
WHY (TUPLE (@ G)
IS A REQUISITE TO BE SATISFIED)
WHEN NIL
META:CODE [COND
((ATTEMPT (IS (@ G))
THEN T)
T)
(T
(PROG
(B:LIST)
(MATCHQ ←G (@ G))
(FOR
B1 IN (PULLOUT SATISFY
SET:OF:BEINGS)
DO
(FOR
X IN (GETP B1 MAIN:EFFECTS)
UNTIL
(ATTEMPT (MATCH (CAR X)
$G)
THEN
(SETQ
B:LIST
(APPEND
(CDR X)
B:LIST)))
DO NIL))
(/SETQ BECAUSE
(TUPLE TUPLE WE CALL THE
SIMPLEST BEING WHICH
CAN BRING ABOUT THE
EFFECT $G))
(FOR X IN (SORT B:LIST
A:BEING:ORDER)
UNTIL
(ATTEMPT (IS $G)
THEN T)
DO
(ATTEMPT (EVAL X)))
(IS $G)
(ASSERT (TUPLE SATISFIED $G]
COMMENTS NIL
PRE:REQUISITES NIL
CO:REQUISITES NIL
POST:REQUISITES NIL
EXPLICIT:ARGS:CHECK T
DEMONS NIL
MAIN:EFFECTS (((SATISFIED ←G)
(SATISFY $G)))
MINOR:EFFECTS NIL
AFFECTS [APPEND
[MAPCAR
(PROG
(B:LIST)
(MATCHQ ←G (@ G))
(FOR
B1 IN (PULLOUT SATISFY
SET:OF:BEINGS)
DO
(FOR X IN (GETP B1 MAIN:EFFECTS)
UNTIL
(ATTEMPT
(MATCH (CAR X)
$G)
THEN
(SETQ B:LIST
(APPEND (CDR X)
B:LIST)))
DO NIL))
(RETURN B:LIST))
(FUNCTION
(LAMBDA
(Y)
(COND
(Y (CONS Y (QUOTE (POSSIBLE:CALLED
]
(QUOTE ((TRY:BEING CALLED)
(SORT CALLED)
(A:BEING:ORDER CALLED]
COMPLEXITY:VECTOR (0.0 .3 .2 .4)
GENERALIZATIONS (SERVE)
SPECIALIZATIONS (TRY:BEING)
ALTERNATIVES (WRITE:PROGRAM
ADAPT:PRECONCEIVED:FUNCTION)
BEING T
SPEC:WHY [TUPLE WE CALL THE SIMPLEST BEING WHICH
CAN BRING ABOUT THE EFFECT
(AWARE USER (PLAUSIBLE NAMES FOR
(
CONCEPT:FORMATION] NIL NIL)
(PUTPROPS SERVE IDEN (((SERVE)
(LIST SERVE)))
IMPLICIT:ARGS NIL
EXPLICIT:ARGS NIL
WHAT (TUPLE DO ANYTHING THE USER ASKS)
HOW (TUPLE GET A TASK FROM THE USER)
WHY (TUPLE FUNDAMENTAL DRIVE TO SERVE THE USER)
WHEN NIL
META:CODE (PROGN
(/SETQ UNKNOWN:TASK NON:EXECUTABLE)
(/SETQ BECAUSE
(TUPLE TUPLE THE CURRENT TASK
(@ UNKNOWN:TASK)
IS NOT EXECUTABLE AND WE
HAVE NOTHING ELSE TO DO AT
THE PRESENT TIME))
(UNTIL (ATTEMPT
(IS (EXECUTABLE UNKNOWN:TASK))
THEN T ELSE
(PROGN (ASSERT (APPLYING DEMONS)
APPLY
$USER:INTERRUPT:DEMONS)
NIL))
DO
(OBTAIN:USABLE:INFORMATION
(QUOTE UNKNOWN:TASK)))
(ASSERT (ATTEMPTING (@ UNKNOWN:TASK)))
(/SETQ BECAUSE
(TUPLE TUPLE WE FINALLY HAVE AN
EXECUTABLE TO TASK TO DO,
NAMELY (@ UNKNOWN:TASK)))
(EVAL UNKNOWN:TASK))
COMMENTS ((ASSERT (PUP WANTS ANY TASK)))
PRE:REQUISITES ((AWARE USER (PUP WANTS ANY TASK)))
CO:REQUISITES NIL
POST:REQUISITES NIL
EXPLICIT:ARGS:CHECK NIL
DEMONS NIL
MAIN:EFFECTS (((ATTEMPTING ←TASK)
(SERVE)))
MINOR:EFFECTS NIL
AFFECTS NIL
COMPLEXITY:VECTOR (.2 .4 .6 .8)
GENERALIZATIONS NIL
SPECIALIZATIONS (WRITE:PROGRAM COUNSEL)
ALTERNATIVES (IGNORE REBEL)
BEING T
SPEC:WHY (TUPLE WE CALL THE SIMPLEST BEING WHICH CAN
BRING ABOUT THE EFFECT
(AWARE USER (PUP WANTS ANY TASK)))
NIL NIL)
(PUTPROPS TRANSLATE IDEN (((TRANSLATE ←NEW:INFO)
(TUPLE TRANSLATE $NEW:INFO)))
BEING T
IMPLICIT:ARGS NIL
EXPLICIT:ARGS (NEW:INFO)
WHAT (TRANSLATE A PIECE OF UNTRANSLATED NEW
INFORMATION)
HOW (TRANSFORM (@ NEW:INFO)
INTO MORE EXECUTABLE FORM)
WHY (NEW INFORMATION (@ NEW:INFO)
IS DECLARATIVE AND MUST BE MADE
PROCEDURAL BEFORE IT MAY BE USED BY THE
SYSTEM)
SPEC:WHY (TUPLE NOW THAT WE HAVE SELECTED
TRANSLATE AS THE BEST BEING OUT
OF THE SET (TRANSLATE
GET:NEW:INFORMATION
ANALYZE:IMPLICATIONS
EXTRACT:RELEVANT:SUBSET)
WE MUST CARRY OUT (TRANSLATE
U))
WHEN (((IS (USABLE INFORMATION ←←ANY))
-60
(TUPLE BECAUSE WE MAY NOT HAVE FULLY
ASSIMILATED THE USABLE INFORMATION
$ANY))
((ATTEMPT (IS (USABLE INFORMATION ←←ANY))
THEN
(FAIL)
ELSE T)
50
(TUPLE BECAUSE THE ABSENCE OF USABLE
INFORMATION ABDUCTIVELY CALLS FOR
THE NEED TO PRODUCE SOME VIA
TRANSLATION)))
META:CODE (QPROG
(←N:INFO ←TRANSLATION)
(ATTEMPT
(IS (TRANSLATION
OF
(@ (EVAL NEW:INFO))
IS ←TRANSLATION))
ELSE
(MATCHQ ←TRANSLATION NON:EXECUTABLE)
)
(MATCHQ ←N:INFO (@ (EVAL NEW:INFO)))
[COND ((ATTEMPT (IS (EXECUTABLE
$TRANSLATION))
THEN NIL ELSE T)
(ATTEMPT (DENY (NEW
INFORMATION
$N:INFO)))
(MATCHQ ←TRANSLATION
(BLIND:BREAK:UP
(TUPLE $$N:INFO)))
(ASSERT (NEW INFORMATION
(TRANSLATION
OF $N:INFO IS
$TRANSLATION]
(COND
(NEW:INFO
(SET NEW:INFO $TRANSLATION)
[COND
((NOT (EQUAL (EVAL NEW:INFO)
NON:EXECUTABLE))
(ASSERT (EXECUTABLE
(@ NEW:INFO]
$TRANSLATION)))
COMMENTS NIL
PRE:REQUISITES NIL
CO:REQUISITES NIL
POST:REQUISITES NIL
EXPLICIT:ARGS:CHECK [ATTEMPT
[IS
(NEW INFORMATION
(@ (EVAL NEW:INFO]
ELSE
(COND
((NULL
(@ (EVAL NEW:INFO)))
T)
(T (FAIL]
DEMONS (TUPLE IDIOM:DEMON)
MAIN:EFFECTS (((USABLE ←NEW:INFO)
(TRANSLATE $NEW:INFO)))
MINOR:EFFECTS (NEW INFORMATION (@ NEW:INFO))
AFFECTS (TUPLE (LOOKUP CALLED)
(PARSE CALLED))
COMPLEXITY:VECTOR (.3 .5 .5 .5)
GENERALIZATIONS NIL
SPECIALIZATIONS NIL
ALTERNATIVES NIL)
(PUTPROPS TRY:BEING IDEN [((TRY:BEING ←B ←ARGS)
(LIST TRY:BEING (TRANSLATE $B)
(TRANSLATE $ARGS]
IMPLICIT:ARGS NIL
EXPLICIT:ARGS (B ARGS)
EXPLICIT:ARGS:CHECK (COND
((AND
(EQUAL T (GETP B BEING))
(EQUAL
(LENGTH (GETP B
EXPLICIT:ARGS))
(LENGTH ARGS)))
T)
(T (FAIL)))
WHAT (TUPLE CARRY OUT BEING (EVAL B)
WITH ARGUMENTS (EVAL ARGS))
META:CODE (PROG (FINAL:CO:REQ FN:VALUE)
(/SETQ BEING:STACK (CONS B
BEING:STACK))
(FOR X IN (GETP B EXPLICIT:ARGS)
AS Y IN ARGS DO
(SET X Y))
(EVAL (GETP B EXPLICIT:ARGS:CHECK)
)
(MAPC (GETP B PRE:REQUISITES)
SATISFY)
(PUSH:DEMONS (GETP B DEMONS))
(MAPC (GETP B CO:REQUISITES)
TRY:TO:SATISFY)
(MAPC (GETP B COMMENTS)
EVAL)
(PUT B SPEC:WHY (QUOTE BECAUSE))
(ASSERT (APPLYING DEMONS)
APPLY
$USER:INTERRUPT:DEMONS)
(SETQ FN:VALUE
(EVAL (GETP B META:CODE)))
(MAPC FINAL:CO:REQ SATISFY)
(POP:DEMONS)
(MAPC (GETP B POST:REQUISITES)
SATISFY)
[FOR X IN (GETP B EXPLICIT:ARGS)
AS Y IN ARGS DO
(COND ((ATOM Y)
(SET Y X]
(/SETQ BEING:STACK (CDR
BEING:STACK))
(RETURN FN:VALUE))
BEING T
SPEC:WHY (NO SPECIAL REASON))
(PUTPROPS WRITE:PROGRAM IDEN [[(WRITE A PROGRAM WHICH DOES ←←TASK)
(WRITE:PROGRAM
(COND
([EQUAL
1
(LENGTH
(PROGN
(SETQ QQ1 $$TASK)
(SETQ QQ2 (QUOTE QQ1))
(ASSERT
(NEW INFORMATION
(@ QQ1)))
(SETQ WP (TRANSLATE QQ2]
(APPEND (QUOTE (TUPLE TUPLE))
WP))
(T (FAIL]
((WRITE:PROGRAM ←TASK)
(TUPLE WRITE:PROGRAM (TRANSLATE $TASK]
BEING T
IMPLICIT:ARGS (TASK:TYPE TASK:NAME)
EXPLICIT:ARGS (TASK)
WHAT (TUPLE WRITE A PROGRAM WHICH DOES
(@ TASK))
HOW (TUPLE CREATE SPECIALIZED LISP CODE WHICH
WILL DO (@ TASK))
WHY (TUPLE FUNDAMENTAL DRIVE TO OBEY USER;
ALSO, IT IS NECESSARY THAT CODE BE
WRITTEN TO DO (@ TASK)
IN ORDER THAT THE TASK
(@ TASK)
MIGHT BE COMPLETED; ALSO, EXAMINE
SPEC:WHY)
SPEC:WHY (NO SPECIAL REASON)
WHEN (((IS (ABILITY (@ TASK)))
-75
(TUPLE BECAUSE A PRE:EXISTING ABILITY
TO DO (@ TASK)
IMPLIES THAT WRITING A NEW
PROGRAM TO ACCOMPLISH IT IS
SUPERFLUOUS))
((IS (PROGRAM (@ TASK)))
-80
(TUPLE BECAUSE WE ARE NOT AFTER MUCH
EFFICIENCY, AND IF A PROGRAM
ALREADY EXISTS, THEN WE SHOULD
USE IT))
((ATTEMPT (IS (ABILITY (@ TASK)))
THEN NIL ELSE T)
40
(BECAUSE THE INABILITY TO DO
(@ TASK)
IS A MILD SIGN THAT WE ARE ON
THE RIGHT TRACK))
([IS (AWARE USER
(PUP IS ABOUT TO WRITE A
PROGRAM TO DO
(@ TASK]
70
(TUPLE BECAUSE WE GO BY THE OLD
ENGLISH LEGAL RULE, THAT
SILENCE SIGNIFIES APPROVAL))
((IS (NEW INFORMATION ←←ANY))
-120
(TUPLE BECAUSE WE SHOULD USE UP THE
NEW INFORMATION BEFORE WRITING
PROGRAMS))
((ATTEMPT (IS (NEW INFORMATION ←←ANY))
THEN NIL ELSE T)
40
(TUPLE BECAUSE IF NO NEW INFO IS
PRESENT, THEN WE NEEDN'T FEEL
GUILTY ABOUT STARTING TO WRITE
A PROGRAM)))
META:CODE [PROG
(DONE I)
(SETQ I (QUOTE I))
[ATTEMPT
(IS (DIFFICULT (@ TASK:TYPE)))
THEN
[SETQ
DONE
(TUPLE OR
(TUPLE COMPLETE
(@ TASK:NAME))
(TUPLE TOO:HARD
(@ TASK]
ELSE
(SETQ DONE (TUPLE COMPLETE
(@ TASK:NAME]
(UNTIL
(EVAL DONE)
DO
(CHOOSE:FROM
(CLASS (
OBTAIN:USABLE:INFORMATION I)
(USE:INFORMATION
I)
(
FILL:IN:UNDEFINED:SECTION I)
(
CLARIFY:IMPROBABLE:SITUATION I)
(
ADAPT:PRECONCEIVED:FUNCTION I)
(FIX:INCORRECT:PIECE
I]
COMMENTS NIL
PRE:REQUISITES ((AWARE USER
(PUP IS ABOUT TO WRITE
A PROGRAM TO DO
(@ TASK)))
(NAME (@ TASK)
TASK:NAME)
(AWARE USER
(THE NAME OF THE
PROGRAM TO DO
(@ TASK)
IS
(@ TASK:NAME)))
(TYPE (@ TASK)
TASK:TYPE)
(AWARE USER
((@ TASK:TYPE)
IS THE TYPE OF
(@ TASK)
TASK THAT PUP IS
WRITING THE PROGRAM
CALLED (@ TASK:NAME)
TO DO)))
CO:REQUISITES NIL
POST:REQUISITES ((AWARE USER
(THE PROGRAM
(@ TASK:NAME)
TO DO
(@ TASK:TYPE)
TYPE OF
(@ TASK)
IS COMPLETE)))
EXPLICIT:ARGS:CHECK T
DEMONS (PROGRAM:WRITING:DEMONS)
MAIN:EFFECTS (((ABILITY ←TASK)
(WRITE:PROGRAM $TASK))
((PROGRAM ←TASK)
(WRITE:PROGRAM $TASK)))
MINOR:EFFECTS NIL
AFFECTS ((OBTAIN:USABLE:INFORMATION
POSSIBLE:CALLED)
(USE:INFORMATION POSSIBLE:CALLED)
(FILL:IN:UNDEFINED:SECTION
POSSIBLE:CALLED)
(CLARIFY:IMPROBABLE:SITUATION
POSSIBLE:CALLED)
(ADAPT:PRECONCEIVED:FUNCTION
POSSIBLE:CALLED))
COMPLEXITY:VECTOR ((PLUS .3
(TIMES .6
(DIMENSION1
TASK:TYPE)))
.9 .7 .5)
GENERALIZATIONS NIL
SPECIALIZATIONS NIL
ALTERNATIVES NIL
ISEN T)
(MAPC SET:OF:BEINGS SEMI:COMPILE)
STOP